Hypertext transfer protocol (HTTP) is an important standard for transferring data over the World Wide Web (WWW). In contrast to Transmission Control Protocol (TCP) which operates independent of the actual data being transferred, HTTP is an application layer protocol in the OSI (Open Systems Interconnection) Model which operates independent of how the data is transferred. Generally, HTTP allows clients to communicate with network resources such as servers or other clients. For example, a client can request a web page stored on the server. To do so, a client makes a request to a server which sends a response.
Version 1.0 of the HTTP protocol (HTTP 1.0) is a commonly used HTTP protocol. The request/response paradigm used by HTTP 1.0 has four stages: establish TCP connection, client HTTP request, server HTTP response, and terminate TCP connection. Because HTTP is a stateless protocol, it does not maintain a connection after the four-stage process has taken place. Therefore, the connection must be reestablished for another transaction. Hence, communications using HTTP 1.0 can be very slow since a new TCP connection is open and then closed each time a client generates a new HTTP request. This can lead to poor performance for real-time data applications such as conferencing applications.
One technique to address this limitation places a Keep Alive header within an HTTP response or a request. The Keep Alive header is not defined by HTTP 1.0, and indicates that the connection should remain open for a certain number of HTTP transactions. Although the Keep Alive technique attempts to provide a connection that lasts beyond a single transaction, there are problems associated with the Keep Alive technique. First, many clients and servers do not support the Keep Alive technique, especially those using HTTP 1.0. Second, the Keep Alive technique can be unstable, as the Keep-Alive connections between a client computer and a server computer can unexpectedly terminate. For example, if a Keep Alive header is not included in each request and response sent between the client and server, the connection can be closed. Third, firewalls and proxy servers often separate clients and servers from outside networks, and prevent Keep Alive connections from being established or unexpectedly close the Keep Alive connections after they are established. Thus there is no guarantee that the Keep Alive technique will work with existing clients and servers.
Thus, there is a need for systems and methods to emulate or establish persistent HTTP connections to overcome the limitations described above. Moreover, the systems and methods should be platform-independent in that client and servers need not specifically support persistent connections.